package com.xyb.dao;

import com.xyb.entity.Course;
import com.xyb.entity.CourseQuery;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * (Course)表数据库访问层
 *
 * @author makejava
 * @since 2021-10-20 16:49:22
 */
public interface CourseDao {
    /**
     * 【插入单条】
     *
     * @param course 实例对象
     * @return 影响行数
     */
    int insertCourse(Course course);
    
    /**
     * 【删除单条】根据主键 id
     *
     * @param courseId 主键id
     * @return 影响行数
     */
    int deleteCourseByCourseId(Long courseId);

    /**
     * 【更新单条】根据主键 id
     *
     * @param course 主键id
     * @param course 更新数据
     * @return 影响行数
     */
    int updateCourseByCourseId(Course course);

    /**
     * 【查询单条】根据主键id,查询所有字段
     *
     * @param courseId  主键id
     * @return Course 对象信息
     */
    Course selectCourseByCourseId(Long courseId);
    
    
    //****************************** 批量操作 ******************************
    
    /**
     * 【批量插入】根据对象列表
     *
     * @param list 新增对象列表
     * @return 影响行数
     */
    int insertCourseByCourseList(List<Course> list);
    
    /**
     * 【批量删除】根据主键 id 列表
     *
     * @param list 主键id列表
     * @return 影响行数
     */
    int deleteCourseByCourseIdList(List<Long> list);
    
    /**
     * 【批量更新】根据对象列表,
     *
     * @param list 对象列表
     * @return 影响行数
     */
    int updateCourseByCourseList(List<Course> list);
    
    /**
     * 【批量查询】根据主键列表,查询所有字段
     *
     * @param list 主键id列表
     * @return List<Course> 对象列表
     */
    List<Course> selectCourseListByCourseIdList(List<Long> list);

    List<Course> selectCourseListByCourseQuery(@Param("query") CourseQuery query);

    List<Course> selectCourseByTopicId(Long topicId);

    List<Course> selectIsUseCourseByTopicId(Long topicId);

    void updateCourseOrderByCourseId(Long[] array);

    List<Course> selectCourseList();
}